home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Collection of Tools & Utilities
/
Collection of Tools and Utilities.iso
/
c
/
cl_7_bug.zip
/
BUG_2.ERR
< prev
next >
Wrap
Text File
|
1992-10-10
|
10KB
|
374 lines
; Static Name Aliases
;
; $S306_stack EQU stack
TITLE bug_2.c
.8087
INCLUDELIB SLIBCE
INCLUDELIB OLDNAMES.LIB
_TEXT SEGMENT WORD PUBLIC 'CODE'
_TEXT ENDS
_DATA SEGMENT WORD PUBLIC 'DATA'
_DATA ENDS
CONST SEGMENT WORD PUBLIC 'CONST'
CONST ENDS
_BSS SEGMENT WORD PUBLIC 'BSS'
_BSS ENDS
DGROUP GROUP CONST, _BSS, _DATA
ASSUME DS: DGROUP, SS: DGROUP
EXTRN __acrtused:ABS
EXTRN _puts:NEAR
EXTRN _strchr:NEAR
_DATA SEGMENT
$SG316 DB '#t', 00H
$SG318 DB 'The program works', 00H
$SG320 DB 'Error: -t switch dosen''t work', 00H
_DATA ENDS
_BSS SEGMENT
$S306_stack DW 01H DUP (?)
_BSS ENDS
_TEXT SEGMENT
ASSUME CS: _TEXT
PUBLIC _main
_main PROC NEAR
;|*** /* Test if switch: Some switch-options are optimized to void */
;|***
;|*** #include <stdio.h>
;|*** #include <string.h>
;|***
;|*** struct state {
;|*** int flags; /* Current state flags */
;|*** };
;|***
;|*** static struct state stack; /* Linked list of stacked states */
;|***
;|*** #define TRACE_ON 000001 /* Trace enabled */
;|*** #define DEBUG_ON 000002 /* Debug enabled */
;|*** #define FILE_ON 000004 /* File name print enabled */
;|*** #define LINE_ON 000010 /* Line number print enabled */
;|*** #define DEPTH_ON 000020 /* Function nest level print enabled */
;|*** #define PROCESS_ON 000040 /* Process name print enabled */
;|*** #define NUMBER_ON 000100 /* Number each line of output */
;|*** #define SANITY_CHECK_ON 000200 /* Check safemalloc on DBUG_ENTER */
;|*** #define FLUSH_ON_WRITE 000400 /* Flush on every write */
;|***
;|*** void _db_push_ (char *control);
;|***
;|*** int main(int argc,char *argv[])
;|*** {
; Line 25
; argc = 4
; argv = 6
;|*** _db_push_ ("#t");
; Line 26
*** 000000 b8 00 00 mov ax,OFFSET DGROUP:$SG316
*** 000003 50 push ax
*** 000004 e8 00 00 call __db_push_
*** 000007 83 c4 02 add sp,2
;|*** if (stack.flags & TRACE_ON)
; Line 27
*** 00000a f6 06 00 00 01 test BYTE PTR $S306_stack,1
*** 00000f 74 05 je $I317
;|*** puts("The program works");
; Line 28
*** 000011 b8 03 00 mov ax,OFFSET DGROUP:$SG318
*** 000014 eb 03 jmp SHORT $L344
$I317:
;|*** else
;|*** puts("Error: -t switch dosen't work");
; Line 30
*** 000016 b8 15 00 mov ax,OFFSET DGROUP:$SG320
$L344:
*** 000019 50 push ax
*** 00001a e8 00 00 call _puts
*** 00001d 83 c4 02 add sp,2
;|*** return 0;
; Line 31
*** 000020 33 c0 xor ax,ax
;|*** }
; Line 32
*** 000022 c3 ret
*** 000023 90 nop
_main ENDP
PUBLIC __db_push_
__db_push_ PROC NEAR
;|***
;|***
;|*** void _db_push_ (control)
;|*** char *control;
;|*** {
; Line 37
*** 000024 55 push bp
*** 000025 8b ec mov bp,sp
*** 000027 56 push si
; control = 4
; register si = scan
; new_str = -2
;|*** register char *scan;
;|*** char *new_str;
;|***
;|*** for (scan=control; scan != NULL; scan = strchr(scan,':'))
; Line 41
*** 000028 8b 76 04 mov si,WORD PTR [bp+4] ;control
*** 00002b 0b f6 or si,si
*** 00002d 75 03 jne $JCC45
*** 00002f e9 b7 00 jmp $FB327
$JCC45:
$F325:
;|*** {
;|*** switch (*(++scan)) {
; Line 43
*** 000032 46 inc si
*** 000033 8a 04 mov al,BYTE PTR [si]
*** 000035 98 cbw
;|*** case 'd':
;|*** case 'D':
;|*** stack.flags |= DEBUG_ON;
;|*** break;
;|*** case 'f':
;|*** case 'F':
;|*** stack.flags |= FILE_ON;
;|*** break;
;|*** case 'L':
;|*** stack.flags |= LINE_ON;
;|*** break;
;|*** case 'n':
;|*** stack.flags |= DEPTH_ON;
;|*** break;
;|*** case 'N':
;|*** stack.flags |= NUMBER_ON;
;|*** break;
;|*** case 'O':
;|*** case 'o':
;|*** stack.flags |= FLUSH_ON_WRITE;
;|*** break;
;|*** case 'p':
;|*** case 'P':
;|*** case 'r':
;|*** stack.flags |= PROCESS_ON;
;|*** break;
;|*** case 't':
;|*** stack.flags |= TRACE_ON;
;|*** break;
;|*** case 'S':
;|*** stack.flags |= SANITY_CHECK_ON;
;|*** break;
;|*** }
; Line 76
*** 000036 3d 6f 00 cmp ax,111 ;006fH
*** 000039 74 75 je $SC337
*** 00003b 76 03 jbe $JCC59
; MONTY 't' = \116 is skipped here. CL thinks that 'o' is the last option
*** 00003d e9 95 00 jmp $FC326
$JCC59:
*** 000040 3c 4f cmp al,79 ;004fH
*** 000042 74 6c je $SC337
*** 000044 3c 53 cmp al,83 ;0053H
*** 000046 74 78 je $SC340
*** 000048 2d 44 00 sub ax,68 ;0044H
*** 00004b a8 01 test al,1
*** 00004d 74 03 je $JCC77
*** 00004f e9 83 00 jmp $FC326
$JCC77:
*** 000052 3d 30 00 cmp ax,48 ;0030H
*** 000055 77 7e ja $FC326
*** 000057 93 xchg ax,bx
*** 000058 2e ff a7 5e 00 jmp WORD PTR cs:$L343[bx]
*** 00005d 90 nop
$L343:
*** 00005e 90 00 DW $SC332
*** 000060 98 00 DW $SC333
*** 000062 d5 00 DW $FC326
*** 000064 d5 00 DW $FC326
*** 000066 a0 00 DW $SC334
*** 000068 a8 00 DW $SC336
*** 00006a b8 00 DW $SC338
*** 00006c d5 00 DW $FC326
*** 00006e d5 00 DW $FC326
*** 000070 d5 00 DW $FC326
*** 000072 d5 00 DW $FC326
*** 000074 d5 00 DW $FC326
*** 000076 d5 00 DW $FC326
*** 000078 d5 00 DW $FC326
*** 00007a d5 00 DW $FC326
*** 00007c d5 00 DW $FC326
*** 00007e 90 00 DW $SC332
*** 000080 98 00 DW $SC333
*** 000082 d5 00 DW $FC326
*** 000084 d5 00 DW $FC326
*** 000086 d5 00 DW $FC326
*** 000088 c8 00 DW $SC335
*** 00008a b8 00 DW $SC338
*** 00008c b8 00 DW $SC338
*** 00008e d0 00 DW $SC339
;|*** case 'd':
; Line 44
$SC332:
;|*** case 'D':
;|*** stack.flags |= DEBUG_ON;
; Line 46
*** 000090 80 0e 00 00 02 or BYTE PTR $S306_stack,2
;|*** break;
; Line 47
*** 000095 eb 3e jmp SHORT $FC326
*** 000097 90 nop
;|*** case 'f':
; Line 48
$SC333:
;|*** case 'F':
;|*** stack.flags |= FILE_ON;
; Line 50
*** 000098 80 0e 00 00 04 or BYTE PTR $S306_stack,4
;|*** break;
; Line 51
*** 00009d eb 36 jmp SHORT $FC326
*** 00009f 90 nop
;|*** case 'L':
; Line 52
$SC334:
;|*** stack.flags |= LINE_ON;
; Line 53
*** 0000a0 80 0e 00 00 08 or BYTE PTR $S306_stack,8
;|*** break;
; Line 54
*** 0000a5 eb 2e jmp SHORT $FC326
*** 0000a7 90 nop
;|*** case 'n':
;|*** stack.flags |= DEPTH_ON;
;|*** break;
;|*** case 'N':
; Line 58
$SC336:
;|*** stack.flags |= NUMBER_ON;
; Line 59
*** 0000a8 80 0e 00 00 40 or BYTE PTR $S306_stack,64 ;0040H
;|*** break;
; Line 60
*** 0000ad eb 26 jmp SHORT $FC326
*** 0000af 90 nop
;|*** case 'O':
; Line 61
$SC337:
;|*** case 'o':
;|*** stack.flags |= FLUSH_ON_WRITE;
; Line 63
*** 0000b0 80 0e 01 00 01 or BYTE PTR $S306_stack+1,1
;|*** break;
; Line 64
*** 0000b5 eb 1e jmp SHORT $FC326
*** 0000b7 90 nop
;|*** case 'p':
; Line 65
$SC338:
;|*** case 'P':
;|*** case 'r':
;|*** stack.flags |= PROCESS_ON;
; Line 68
*** 0000b8 80 0e 00 00 20 or BYTE PTR $S306_stack,32 ;0020H
;|*** break;
; Line 69
*** 0000bd eb 16 jmp SHORT $FC326
*** 0000bf 90 nop
;|*** case 't':
;|*** stack.flags |= TRACE_ON;
;|*** break;
;|*** case 'S':
; Line 73
$SC340:
;|*** stack.flags |= SANITY_CHECK_ON;
; Line 74
*** 0000c0 80 0e 00 00 80 or BYTE PTR $S306_stack,128 ;0080H
;|*** break;
; Line 75
*** 0000c5 eb 0e jmp SHORT $FC326
*** 0000c7 90 nop
;|*** case 'n':
; Line 55
$SC335:
;|*** stack.flags |= DEPTH_ON;
; Line 56
*** 0000c8 80 0e 00 00 10 or BYTE PTR $S306_stack,16 ;0010H
;|*** break;
; Line 57
*** 0000cd eb 06 jmp SHORT $FC326
*** 0000cf 90 nop
;|